Option Explicit

' ======================================================================
' 执行所有测试用例
' ======================================================================
Public Sub test_all_case()
    ' ==============================
    ' 测试: sortAscArray
    ' ==============================
    ' 测试: 所有元素的值是相同的
    test_sortAscArray_same_value_elem
    ' 测试: 元素是完全降序的
    test_sortAscArray_desc_value_elem
    ' 测试: 元素是完全升序的
    test_sortAscArray_asc_value_elem
    ' 测试: 元素是乱序的
    test_sortAscArray_disorder_value_elem
    ' 测试: 只有一个元素
    test_sortAscArray_only_one_elem
    ' 测试: 没有元素
    test_sortAscArray_no_elem
    ' ==============================
    ' 测试: sortDescArray
    ' ==============================
    ' 测试: 所有元素的值是相同的
    test_sortDescArray_same_value_elem
    ' 测试: 元素是完全降序的
    test_sortDescArray_desc_value_elem
    ' 测试: 元素是完全升序的
    test_sortDescArray_asc_value_elem
    ' 测试: 元素是乱序的
    test_sortDescArray_disorder_value_elem
    ' 测试: 只有一个元素
    test_sortDescArray_only_one_elem
    ' 测试: 没有元素
    test_sortDescArray_no_elem
    ' ==============================
    ' 测试: sortAscPrimitivePairByKey2
    ' ==============================
    ' 测试: 所有元素的值是相同的
    test_sortAscPrimitivePairByKey2_same_value_elem
    ' 测试: 元素是完全降序的
    test_sortAscPrimitivePairByKey2_desc_value_elem
    ' 测试: 元素是完全升序的
    test_sortAscPrimitivePairByKey2_asc_value_elem
    ' 测试: 元素是乱序的
    test_sortAscPrimitivePairByKey2_disorder_value_elem
    ' 测试: 只有一个元素
    test_sortAscPrimitivePairByKey2_only_one_elem
    ' 测试: 没有元素
    test_sortAscPrimitivePairByKey2_no_elem
    ' ==============================
    ' 测试: sortDescPrimitivePairByKey2
    ' ==============================
    ' 测试: 所有元素的值是相同的
    test_sortDescPrimitivePairByKey2_same_value_elem
    ' 测试: 元素是完全降序的
    test_sortDescPrimitivePairByKey2_desc_value_elem
    ' 测试: 元素是完全升序的
    test_sortDescPrimitivePairByKey2_asc_value_elem
    ' 测试: 元素是乱序的
    test_sortDescPrimitivePairByKey2_disorder_value_elem
    ' 测试: 只有一个元素
    test_sortDescPrimitivePairByKey2_only_one_elem
    ' 测试: 没有元素
    test_sortDescPrimitivePairByKey2_no_elem
End Sub

' ======================================================================
' 通用方法
' ======================================================================
Private Function createPair(ByRef k1 As Variant, ByRef k2 As Variant) As PrimitivePair
    Set createPair = New PrimitivePair
    createPair.Key1 = k1
    createPair.Key2 = k2
End Function

' ======================================================================
' 测试用例
' ======================================================================
' ==================================================
' 测试方法: sortAscArray
' ==================================================
' 测试: 所有元素的值是相同的
Private Sub test_sortAscArray_same_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr(0) = 1
    arr(1) = 1
    arr(2) = 1
    arr(3) = 1
    arr(4) = 1

    ' 3. 执行测试方法
    UtilsSort.sortAscArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 1
    Debug.Assert arr(1) = 1
    Debug.Assert arr(2) = 1
    Debug.Assert arr(3) = 1
    Debug.Assert arr(4) = 1

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr2(0) = 1
    arr2(1) = 1
    arr2(2) = 1
    arr2(3) = 1

    ' 3. 执行测试方法
    UtilsSort.sortAscArray arr2
    
    ' 4. 检查结果
    Debug.Assert arr2(0) = 1
    Debug.Assert arr2(1) = 1
    Debug.Assert arr2(2) = 1
    Debug.Assert arr2(3) = 1
End Sub

' 测试: 元素是完全降序的
Private Sub test_sortAscArray_desc_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 4
    arr(1) = 3
    arr(2) = 2
    arr(3) = 1
    arr(4) = 0

    ' 3. 执行测试方法
    UtilsSort.sortAscArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 0
    Debug.Assert arr(1) = 1
    Debug.Assert arr(2) = 2
    Debug.Assert arr(3) = 3
    Debug.Assert arr(4) = 4

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr2(0) = 4
    arr2(1) = 3
    arr2(2) = 2
    arr2(3) = 1

    ' 3. 执行测试方法
    UtilsSort.sortAscArray arr2
    
    ' 4. 检查结果
    Debug.Assert arr2(0) = 1
    Debug.Assert arr2(1) = 2
    Debug.Assert arr2(2) = 3
    Debug.Assert arr2(3) = 4
End Sub

' 测试: 元素是完全升序的
Private Sub test_sortAscArray_asc_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 1
    arr(1) = 2
    arr(2) = 3
    arr(3) = 4
    arr(4) = 5

    ' 2. 执行测试方法
    UtilsSort.sortAscArray arr
    
    ' 3. 检查结果
    Debug.Assert arr(0) = 1
    Debug.Assert arr(1) = 2
    Debug.Assert arr(2) = 3
    Debug.Assert arr(3) = 4
    Debug.Assert arr(4) = 5

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer
    arr2(0) = 1
    arr2(1) = 2
    arr2(2) = 3
    arr2(3) = 4

    ' 2. 执行测试方法
    UtilsSort.sortAscArray arr2
    
    ' 3. 检查结果
    Debug.Assert arr2(0) = 1
    Debug.Assert arr2(1) = 2
    Debug.Assert arr2(2) = 3
    Debug.Assert arr2(3) = 4
End Sub

' 测试: 元素是乱序的
Private Sub test_sortAscArray_disorder_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 4
    arr(1) = 1
    arr(2) = 3
    arr(3) = 5
    arr(4) = 2

    ' 2. 执行测试方法
    UtilsSort.sortAscArray arr
    
    ' 3. 检查结果
    Debug.Assert arr(0) = 1
    Debug.Assert arr(1) = 2
    Debug.Assert arr(2) = 3
    Debug.Assert arr(3) = 4
    Debug.Assert arr(4) = 5

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer
    arr2(0) = 4
    arr2(1) = 1
    arr2(2) = 3
    arr2(3) = 5

    ' 2. 执行测试方法
    UtilsSort.sortAscArray arr2
    
    ' 3. 检查结果
    Debug.Assert arr2(0) = 1
    Debug.Assert arr2(1) = 3
    Debug.Assert arr2(2) = 4
    Debug.Assert arr2(3) = 5
End Sub

' 测试: 只有一个元素
Private Sub test_sortAscArray_only_one_elem()
    ' 1. 创建元素数组
    Dim arr(0 To 0) As Integer
    arr(0) = 2

    ' 2. 执行测试方法
    UtilsSort.sortAscArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 2
End Sub

' 测试: 没有元素
Private Sub test_sortAscArray_no_elem()
    ' 2. 执行测试方法
    UtilsSort.sortAscArray Array()
    
    ' 4. 检查结果
    ' Debug.Assert arrRef.Count = 0
End Sub

' ==================================================
' 测试方法: sortDescArray
' ==================================================
' 测试: 所有元素的值是相同的
Private Sub test_sortDescArray_same_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr(0) = 1
    arr(1) = 1
    arr(2) = 1
    arr(3) = 1
    arr(4) = 1

    ' 3. 执行测试方法
    UtilsSort.sortDescArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 1
    Debug.Assert arr(1) = 1
    Debug.Assert arr(2) = 1
    Debug.Assert arr(3) = 1
    Debug.Assert arr(4) = 1

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr2(0) = 1
    arr2(1) = 1
    arr2(2) = 1
    arr2(3) = 1

    ' 3. 执行测试方法
    UtilsSort.sortDescArray arr2
    
    ' 4. 检查结果
    Debug.Assert arr2(0) = 1
    Debug.Assert arr2(1) = 1
    Debug.Assert arr2(2) = 1
    Debug.Assert arr2(3) = 1
End Sub

' 测试: 元素是完全降序的
Private Sub test_sortDescArray_desc_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 4
    arr(1) = 3
    arr(2) = 2
    arr(3) = 1
    arr(4) = 0

    ' 3. 执行测试方法
    UtilsSort.sortDescArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 4
    Debug.Assert arr(1) = 3
    Debug.Assert arr(2) = 2
    Debug.Assert arr(3) = 1
    Debug.Assert arr(4) = 0

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer

    ' 2. 创建并添加值相同的多个元素
    arr2(0) = 4
    arr2(1) = 3
    arr2(2) = 2
    arr2(3) = 1

    ' 3. 执行测试方法
    UtilsSort.sortDescArray arr2
    
    ' 4. 检查结果
    Debug.Assert arr2(0) = 4
    Debug.Assert arr2(1) = 3
    Debug.Assert arr2(2) = 2
    Debug.Assert arr2(3) = 1
End Sub

' 测试: 元素是完全升序的
Private Sub test_sortDescArray_asc_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 1
    arr(1) = 2
    arr(2) = 3
    arr(3) = 4
    arr(4) = 5

    ' 2. 执行测试方法
    UtilsSort.sortDescArray arr
    
    ' 3. 检查结果
    Debug.Assert arr(0) = 5
    Debug.Assert arr(1) = 4
    Debug.Assert arr(2) = 3
    Debug.Assert arr(3) = 2
    Debug.Assert arr(4) = 1

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer
    arr2(0) = 1
    arr2(1) = 2
    arr2(2) = 3
    arr2(3) = 4

    ' 2. 执行测试方法
    UtilsSort.sortDescArray arr2
    
    ' 3. 检查结果
    Debug.Assert arr2(0) = 4
    Debug.Assert arr2(1) = 3
    Debug.Assert arr2(2) = 2
    Debug.Assert arr2(3) = 1
End Sub

' 测试: 元素是乱序的
Private Sub test_sortDescArray_disorder_value_elem()
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr(0 To 4) As Integer
    arr(0) = 4
    arr(1) = 1
    arr(2) = 3
    arr(3) = 5
    arr(4) = 2

    ' 2. 执行测试方法
    UtilsSort.sortDescArray arr
    
    ' 3. 检查结果
    Debug.Assert arr(0) = 5
    Debug.Assert arr(1) = 4
    Debug.Assert arr(2) = 3
    Debug.Assert arr(3) = 2
    Debug.Assert arr(4) = 1

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Dim arr2(0 To 3) As Integer
    arr2(0) = 4
    arr2(1) = 1
    arr2(2) = 3
    arr2(3) = 5

    ' 2. 执行测试方法
    UtilsSort.sortDescArray arr2
    
    ' 3. 检查结果
    Debug.Assert arr2(0) = 5
    Debug.Assert arr2(1) = 4
    Debug.Assert arr2(2) = 3
    Debug.Assert arr2(3) = 1
End Sub

' 测试: 只有一个元素
Private Sub test_sortDescArray_only_one_elem()
    ' 1. 创建元素数组
    Dim arr(0 To 0) As Integer
    arr(0) = 2

    ' 2. 执行测试方法
    UtilsSort.sortDescArray arr
    
    ' 4. 检查结果
    Debug.Assert arr(0) = 2
End Sub

' 测试: 没有元素
Private Sub test_sortDescArray_no_elem()
    ' 2. 执行测试方法
    UtilsSort.sortDescArray Array()
    
    ' 4. 检查结果
    ' Debug.Assert arrRef.Count = 0
End Sub

' ==================================================
' 测试方法: sortAscPrimitivePairByKey2
' ==================================================
' 测试: 所有元素的值是相同的
Private Sub test_sortAscPrimitivePairByKey2_same_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 1)
    arrRef.Add createPair(3, 1)
    arrRef.Add createPair(4, 1)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
    Debug.Assert arrRef.Item(4).Key1 = 4

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 1)
    arrRef.Add createPair(3, 1)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
End Sub

' 测试: 元素是完全降序的
Private Sub test_sortAscPrimitivePairByKey2_desc_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 3)
    arrRef.Add createPair(2, 2)
    arrRef.Add createPair(3, 1)
    arrRef.Add createPair(4, 0)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 4
    Debug.Assert arrRef.Item(1).Key1 = 3
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 1
    Debug.Assert arrRef.Item(4).Key1 = 0

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 3)
    arrRef.Add createPair(2, 2)
    arrRef.Add createPair(3, 1)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 3
    Debug.Assert arrRef.Item(1).Key1 = 2
    Debug.Assert arrRef.Item(2).Key1 = 1
    Debug.Assert arrRef.Item(3).Key1 = 0
End Sub

' 测试: 元素是完全升序的
Private Sub test_sortAscPrimitivePairByKey2_asc_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 2)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 4)
    arrRef.Add createPair(4, 5)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
    Debug.Assert arrRef.Item(4).Key1 = 4

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 2)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 4)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
End Sub

' 测试: 元素是乱序的
Private Sub test_sortAscPrimitivePairByKey2_disorder_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 5)
    arrRef.Add createPair(4, 2)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 1
    Debug.Assert arrRef.Item(1).Key1 = 4
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 0
    Debug.Assert arrRef.Item(4).Key1 = 3

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 5)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 1
    Debug.Assert arrRef.Item(1).Key1 = 2
    Debug.Assert arrRef.Item(2).Key1 = 0
    Debug.Assert arrRef.Item(3).Key1 = 3
End Sub

' 测试: 只有一个元素
Private Sub test_sortAscPrimitivePairByKey2_only_one_elem()
    ' 1. 创建元素数组
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 10)

    ' 3. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
End Sub

' 测试: 没有元素
Private Sub test_sortAscPrimitivePairByKey2_no_elem()
    ' 1. 创建元素数组
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 执行测试方法
    UtilsSort.sortAscPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Count = 0
End Sub

' ==================================================
' 测试方法: sortDescPrimitivePairByKey2
' ==================================================
' 测试: 所有元素的值是相同的
Private Sub test_sortDescPrimitivePairByKey2_same_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 1)
    arrRef.Add createPair(3, 1)
    arrRef.Add createPair(4, 1)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
    Debug.Assert arrRef.Item(4).Key1 = 4

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 1)
    arrRef.Add createPair(3, 1)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
End Sub

' 测试: 元素是完全降序的
Private Sub test_sortDescPrimitivePairByKey2_desc_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 3)
    arrRef.Add createPair(2, 2)
    arrRef.Add createPair(3, 1)
    arrRef.Add createPair(4, 0)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
    Debug.Assert arrRef.Item(4).Key1 = 4

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 3)
    arrRef.Add createPair(2, 2)
    arrRef.Add createPair(3, 1)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
    Debug.Assert arrRef.Item(1).Key1 = 1
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 3
End Sub

' 测试: 元素是完全升序的
Private Sub test_sortDescPrimitivePairByKey2_asc_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 2)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 4)
    arrRef.Add createPair(4, 5)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 4
    Debug.Assert arrRef.Item(1).Key1 = 3
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 1
    Debug.Assert arrRef.Item(4).Key1 = 0

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 1)
    arrRef.Add createPair(1, 2)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 4)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 3
    Debug.Assert arrRef.Item(1).Key1 = 2
    Debug.Assert arrRef.Item(2).Key1 = 1
    Debug.Assert arrRef.Item(3).Key1 = 0
End Sub

' 测试: 元素是乱序的
Private Sub test_sortDescPrimitivePairByKey2_disorder_value_elem()
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef

    ' ==============================
    ' 1. 奇数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 5)
    arrRef.Add createPair(4, 2)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 3
    Debug.Assert arrRef.Item(1).Key1 = 0
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 4
    Debug.Assert arrRef.Item(4).Key1 = 1

    ' ==============================
    ' 2. 偶数个元素测试
    ' ==============================
    ' 1. 创建元素数组
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 4)
    arrRef.Add createPair(1, 1)
    arrRef.Add createPair(2, 3)
    arrRef.Add createPair(3, 5)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 3
    Debug.Assert arrRef.Item(1).Key1 = 0
    Debug.Assert arrRef.Item(2).Key1 = 2
    Debug.Assert arrRef.Item(3).Key1 = 1
End Sub

' 测试: 只有一个元素
Private Sub test_sortDescPrimitivePairByKey2_only_one_elem()
    ' 1. 创建元素数组
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 创建并添加值相同的多个元素
    arrRef.Add createPair(0, 10)

    ' 3. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Item(0).Key1 = 0
End Sub

' 测试: 没有元素
Private Sub test_sortDescPrimitivePairByKey2_no_elem()
    ' 1. 创建元素数组
    Dim arrRef As IObjArrayRef
    Dim realArrRef As ObjArrayRef
    Set realArrRef = New ObjArrayRef
    realArrRef.Init 10
    Set arrRef = realArrRef

    ' 2. 执行测试方法
    UtilsSort.sortDescPrimitivePairByKey2 arrRef
    
    ' 4. 检查结果
    Debug.Assert arrRef.Count = 0
End Sub